﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections;
using Interfaces;

namespace Model
{
    public class ArbejdslogColl
    {
        // Attributter
        private List<Arbejdslog> arbejdslogs; // Aggregering af arbejdslog

         // Konstruktør
        public ArbejdslogColl()
        {
            arbejdslogs = new List<Arbejdslog>(); // Laver arbejdslog-listen
        }

        #region Operationer på arbejdslogobjekter

        // Metode der opretter en arbejdslog
        public void OpretArbejdslog(int arbejdslogID, DateTime starttidspunkt, DateTime sluttidspunkt, int tid, string note, bool aktiv)
        {
            Arbejdslog arbejdslog = new Arbejdslog(arbejdslogID, starttidspunkt, sluttidspunkt, tid, note, aktiv);
            arbejdslogs.Add(arbejdslog);
        }
        
        // Metode der finder den enkelte arbejdslog ud fra et arbejdslogID
        public Arbejdslog FindArbejdslog(int arbejdslogID)
        {
            foreach (Arbejdslog a in arbejdslogs)
            {
                if (arbejdslogID == a.ArbejdslogID)
                {
                    return a;
                }
            }
            return null;
        }

        // Metode der redigerer et sluttidspunkt og tiden på en arbejdslog
        public void RedigerSluttid(int arbejdslogID, DateTime sluttidspunkt, int tid)
        {
            Arbejdslog arbejdslog = FindArbejdslog(arbejdslogID);
            arbejdslog.Sluttidspunkt = sluttidspunkt;
            arbejdslog.Tid = tid;
        }

        // Metode der redigerer en note på en arbejdslog
        public void RedigerNote(int arbejdslogID, string note)
        {
            Arbejdslog arbejdslog = FindArbejdslog(arbejdslogID);
            arbejdslog.Note = note;
        }

        // Metode til at redigere aktiv på en arbejdslog
        public void RedigerAktiv(int arbejdslogID, bool aktiv)
        {
            Arbejdslog arbejdslog = FindArbejdslog(arbejdslogID);
            arbejdslog.Aktiv = aktiv;
        }

        // Metode til at hente liste over arbejdslogs
        public IEnumerator GetArbejdslogs()
        {
            return arbejdslogs.GetEnumerator();
        }

        //metode til at hente titlen på et projekt der er associeret til en arbejdslog
        public string FindArbejdslogsProjektTitel(int arbejdslogID)
        {
            Arbejdslog a = FindArbejdslog(arbejdslogID);
            Projekt p = a.GetMitProjekt();
            return p.Titel;
        }
        
        #endregion

        #region Associeringsmetoder

        // Kald af metode til at tilknytte et projekt-objekt til et arbejdslog-objekt
        public void AssocierProjekt(int arbejdslogID, Projekt etProjekt)
        {
            Arbejdslog arbejdslog = FindArbejdslog(arbejdslogID);
            arbejdslog.TilknytProjekt(etProjekt);
        }

        // Kald af metode til at tilknytte et medarbejder-objekt til et arbejdslog-objekt
        public void AssocierMedarbejder(int arbejdslogID, Medarbejder enMedarbejder)
        {
            Arbejdslog arbejdslog = FindArbejdslog(arbejdslogID);
            arbejdslog.TilknytMedarbejder(enMedarbejder);
        }

        // Kald af metode til at hente associeret projekt;
        public Projekt GetMitProjekt(int arbejdslogID)
        {
            Arbejdslog arbejdslog = FindArbejdslog(arbejdslogID);
            return arbejdslog.GetMitProjekt();
        }

        // Kald af metode til at hente liste over associerede medarbejdere
        public IEnumerator GetMineMedarbejdere(int arbejdslogID)
        {
            Arbejdslog arbejdslog = FindArbejdslog(arbejdslogID);
            return arbejdslog.GetMineMedarbejdere();
        }

        #endregion
    }
}
